#ifndef Token_h__
#define Token_h__

#include <cstdlib>
#include <string>
#include <stdint.h>
#include<cstdlib>

class MD5
{
private:
	struct md5_context
	{
		uint32_t total[2];
		uint32_t state[4];
		uint8_t  buffer[64];
	};

	static void md5_starts(struct md5_context *ctx);
	static void md5_process(struct md5_context *ctx, uint8_t data[64]);
	static void md5_update(struct md5_context *ctx,  uint8_t *input, int length);
	static void md5_finish(struct md5_context *ctx,  uint8_t digest[16]);

public:
	static void generate(const char * src_buf, int buf_size, char * des_buf);

};

class Token
{
public:
	static std::string get_token(const char * ac)
	{
		using namespace std;
		string str(ac);
		str += rand();
		time_t t = time(nullptr);
		str += t;
		char buf[33];
		MD5::generate(str.c_str(), str.length(), buf);
		return string(buf);
	}
};

#endif // Token_h__
